#include <stdlib.h>
#include <stdio.h>
#include <string.h>

struct node
{
	unsigned int id;
	struct node *next;
};

typedef struct node node_t;


node_t* node_create(void)
{
	node_t *p_node;
	p_node = malloc(sizeof(node_t));
	if(p_node == NULL){
		printf("list_create failed\n");
		exit(-1);
	}

	memset(p_node, 0, sizeof(node_t));
	p_node->next = p_node;
	return p_node;
}


void list_insert_after(node_t *l, node_t *n)
{
	n->next = l->next;
	l->next = n;
}

void list_remove_after(node_t *l)
{
	node_t *n = l->next;
	l->next = n->next;
	free(n);
}

int list_del(node_t *head)
{
	if(head == NULL){
		return 0;
	}

	while(!head->next)
	{
		list_remove_after(head);
	}

	free(head);
}

int main()
{
	unsigned int i;
	node_t *head;
	node_t *p_node;

	head = node_create();
	for(i=1; i<4; i++)
	{
		p_node = node_create();
		p_node->id = i;
		list_insert_after(head, p_node);
	}
	
	p_node = head;
	while(p_node)
	{
		printf("original id = %d\n", p_node->id);
		p_node = p_node->next;
	}

	p_node = head;
	do{
		for(i=0; i<2; i++)
		{
			p_node = p_node->next;
		}

	}while(head->next)

	return 0;
}
